direnv で特定のディレクトリ下の環境変数を定義する
direnv
direnv は、特定のディレクトリに移動したときのみ環境変数を有効化するツールです。アプリごとに環境変数を変更したいときに便利なアイテムです。ちなみに、言語は Go で開発されているようです。
私は、Middleman で静的 Web サイトを S3 にデプロイするとき (ちなみに middleman-s3_sync という 便利 Gem) の AWS のアクセスキーとシークレットキーを設定するときに使いました。類似ツールに Dotenv がありますが、こちらは環境変数を有効化するために Dotenv.load を実行する必要があります。direnv はディレクトリに移動してきたタイミングで自動で有効化してくれて楽だったのでこっちを採用しました。どちらが良いかは開発環境に依るかなぁと思います。
direnv を使おう
早速使ってみましょう。Mac の場合は Homebrew でインストールするのがオススメです。
$ brew install direnv
インストールが終わったら ~/.zshrc ファイルを開き、次のコマンドを追加して保存します(Bash の場合は zsh 部分が bash になります)。保存後は source ~/.zshrc で再読み込みを忘れずに。
eval "$(direnv hook zsh)"
以上で direnv が利用できるようになりました。設定したいディレクトリ下で次のコマンドを実行しましょう。
$ direnv edit .
カレントディレクトリに .envrc というファイルが作成されます。このファイル内に定義したい環境変数を記述していきます。
export AWS_ACCESS_KEY_ID="AWSのアクセスキー" export AWS_SECRET_ACCESS_KEY="AWSのシークレットアクセスキー"
保存すると記述した内容が実行されます。echo してみると、設定した環境変数がちゃんと設定されていることが確認できます。
direnv: loading .envrc direnv: export +AWS_ACCESS_KEY_ID +AWS_SECRET_ACCESS_KEY $ echo $AWS_ACCESS_KEY_ID AWSのアクセスキー
また、direnv を設定したディレクトリから離れると自動でアンロードしてくれます。便利ですね!
$ cd ../ direnv: unloading
まとめ
AWS のアクセスキーとシークレットアクセスキーを例として紹介しましたが、それに限らず開発の現場ではいろいろ必要な場面が出てくると思います。ぜひ使ってみてください!
あ、そして .envrc を Git の Index に追加しないように注意してくださいねw